package controllers;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.persistence.PersistenceException;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import models.Menu;
import models.Resto;
import play.i18n.Messages;
import play.libs.F.Promise;
import play.libs.Json;
import play.libs.ws.WS;
import play.libs.ws.WSResponse;
import play.mvc.BodyParser;
import play.mvc.Controller;
import play.mvc.Result;
import com.avaje.ebean.Ebean;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class Cuisiner extends Controller {
// private final static String feedUrl =
// "http://beta.poireauxvinaigrette.com/restos/528/43.6036763/1.4426685?format=json";
private final static String feedUrl2 = "http://localhost:9000/restos/528/43.6036763/1.4426685?format=json";
public static Result index() {
return ok("Got request " + request() + "!");
}
@BodyParser.Of(BodyParser.Json.class)
public static Result cuisine() {
Menu menu = null;
JsonNode json = null;
try {
json = request().body().asJson();
JsonParser parser = json.traverse();
ObjectMapper mapper = new ObjectMapper();
menu = mapper.readValue(parser, Menu.class);
menu.creationDate = new Date();
Resto restoAttached = Resto.find.where().eq("mobile",menu.mobile).findUnique();
if (restoAttached == null) {
throw new Exception(Messages.get("resto.inconnu", menu.resto.mobile));
} else {
menu.resto = restoAttached;
}
//Ebean.refresh(sms.resto);
Ebean.save(menu);
} catch (Exception e) {
return badRequest(json);
}
return ok(Json.toJson(menu));
}
public static Promise<Result> setMenu() {
// msisdn=06999213270&to=12108054321&messageId=000000FFFB0356D1&text=menu&type=text&message-timestamp=2012-08-19+20%3A38%3A23
final String urlMenu = "http://localhost:9000/newMenu";
ObjectNode result = Json.newObject();
result.put("mobile", "33699213270");
result.put("receptionDate", DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ss").print(new DateTime()));//"2012-10-23");
result.put("type", "text");
result.put("text", "menu du jour avec combawa");
result.put("destinataire", "12108054321");
result.put("messageId", "11");
Promise<WSResponse> promise = WS.url(urlMenu).post(result);
return promise.map(response -> ok(" tst : " + response.asJson()));
//return ok(resultat.get(1000));
// promise.map(response -> ok(" tst : " + response.asJson()));
//return ok(Json.toJson(result));
//return ok(Json.toJson(resultat));
}
public static Promise<Result> getRestos() {
Promise<WSResponse> promise = WS.url(feedUrl2).get();
return promise.map(response -> ok(" tst : " + response.asJson()));
}
public static Result cuisine(String msisdn, String to, String messageId, String text, String type) {
Menu sms = new Menu();
try {
sms.resto = Resto.find.where().eq("mobile", msisdn).findUnique();
if (sms.resto == null) {
return internalServerError(msisdn + " mobile inconnu");
}
sms.destinataire = to;
sms.messageId = messageId;
sms.text = text;
sms.typeMsg = type;
sms.creationDate = new Date();
String messagetimestamp = request().getQueryString("message-timestamp");
sms.receptionDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(messagetimestamp);
Ebean.save(sms);
} catch (Exception e) {
String message;
if (e instanceof PersistenceException)
message = e.getCause().getMessage();
else
message = e.getMessage();
return internalServerError("Oops : " + message);
}
return ok("Sms received :" + sms.messageId);
}
}